Embedded computer systems are used in a wide range of electronic devices and other equipment, including mobile phones, printers, and cars. These devices are not usually regarded as computer systems, but they nevertheless rely heavily on embedded computer systems to provide key functions, functionality, and features. In many cases, the required computing capabilities of such embedded systems match or exceed the capabilities required of general-purpose computers. Furthermore, embedded systems must often meet severe cost and power dissipation requirements. The number of embedded computers far exceeds the number of more general-purpose computer systems such as PCs or servers and the total value of these embedded computers will eventually exceed that of general-purpose computer systems.
The design process for embedded computers differs from that of general-purpose computer systems. The embedded computer systems have greater design freedom than general-purpose computers because there is little need to adhere to existing standards to run existing software. In addition, since embedded computers are used in specific settings, they can be custom-tuned to a greater degree than a general purpose computer. On the other hand, total sales of a particular embedded computer system are typically insufficient to support a full custom design. Therefore, although there is a greater freedom to customize and the benefits of customization are large, the available design budget is limited. Therefore, automated design tools are needed to capture the benefits of customization while maintaining a low design cost.
The specification of an embedded computer system includes specifications of design parameters for several subsystems. For example, a cache memory can include a unified cache or a split-cache, and these caches can be specified in terms of a cache size, associativity, line size, and number of ports. For example, cache memory design can be specified as an 8 kB 2-way set associative cache with a line size of 32 bytes. The evaluation of cache designs is time-consuming because of the complexity of processor and cache simulation. In addition, the size of the embedded processor design space increases combinatorially with the number of design parameters. As a result, an exhaustive exploration of a typical embedded processor design space is infeasible and improved methods for evaluating designs are needed.
Many other complex systems encounter similar problems. Evaluation of system designs can be slow and expensive, or determining whether a particular combination of design parameters yields a valid design can be difficult. Accordingly, improved methods for identifying valid system designs and determining how well various designs satisfy evaluation criteria are needed.